home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 2 / Atari Mega Archive CD - Volume 2.iso / minix / up1510b.tgz / up1510b / src / commands / stterm / write_tty.c < prev   
C/C++ Source or Header  |  1990-07-15  |  1KB  |  89 lines

  1. /* get chars from keyboard and put them to rs232 */
  2.  
  3. #include <sys/types.h>
  4. #include <stdio.h>
  5. #include <fcntl.h>
  6. #include <signal.h>
  7. #include "const.h"
  8.  
  9. #define EOT '\004'    /* ^D */
  10. char err_buf[BUFSIZ];
  11. char **envptr;
  12.  
  13. #ifdef __STDC__
  14. void cleanup(int foo)
  15. #else
  16. int cleanup()
  17. #endif
  18. {
  19.   fprintf(stderr, "writer stopped\n");
  20.   fflush(stderr);
  21.  
  22.   exit(0);
  23. }
  24.  
  25. /* passed the escape char, reader pid as args */
  26. main(argc, argv, envp)
  27. int argc;
  28. char **argv;
  29. char **envp;
  30. {
  31.   char ch;
  32.   char esc = *argv[1]; /* no errchk */
  33.   int r_pid = atoi(argv[2]);
  34.   char was_newline = TRUE;
  35.  
  36.   envptr = envp;
  37.   signal(SIGINT,  SIG_IGN);
  38.   signal(SIGQUIT, SIG_IGN);
  39.   signal(SIGTERM, cleanup);
  40.  
  41.   setbuf(stderr, err_buf);
  42.  
  43.   fprintf(stderr, "writer started\n");
  44.   fflush(stderr);
  45.  
  46.   while (TRUE) {
  47.     read(0, &ch, 1);
  48.     ch &= (char)0177;
  49.     
  50.     if (was_newline) {
  51.         if (ch == esc) {
  52.             read(0, &ch, 1);
  53.             ch &= (char)0177;
  54.             
  55.             switch (ch) {
  56.  
  57.             case EOT:
  58.             case '.':
  59.                 cleanup(1);  /* go home! */
  60.  
  61.             case '!':
  62.                 /* tell read_tty to cool off */
  63.                 kill(r_pid, SIGALRM);
  64.                 do_shell();
  65.                 /* wake him up again */
  66.                 kill(r_pid, SIGALRM);
  67.             break;
  68.  
  69.             default:
  70.                 if(ch != esc)
  71.                 {
  72.                     fprintf(stderr, "invalid command--use\
  73.  \"~~\" to start a line with \"~\"\n");
  74.                     fflush(stderr);
  75.                 }
  76.                 
  77.             }
  78.         }
  79.     }            
  80.  
  81.     if (ch == '\r')
  82.         was_newline = TRUE;
  83.     else
  84.         was_newline = FALSE;
  85.  
  86.     write(1, &ch, 1);
  87.   }
  88. }
  89.